《Android 基础(四十二)》 MultiDex

1. 前言

最近做项目开发的时候,遇到一个问题,NoClassDef,NoMethod之类的错误,但是把log往前看,会发现一些Dalvik的一些报错,看到这些log之后,就会觉得后面的什么方法找不到,类没有定义什么的错误真是的应该出现,那么这些Dalvik的错误怎么解释呢?
因为类似的报错只出现在了一个同事的手机上,而且是KK版本,比较老。介绍下我的分析思路:

  1. 确定问题发生位置,注释掉(并解决因注释引起的编译错误)—> Defeat
  2. 因为是KK版本,调整minSDK到19 —> Defeat
  3. 删除或者更新引起问题的jar包 —> Defeat
  4. 考虑到MultiDex在Android5.0 以后默认支持,为兼容旧版本,手动兼容一下
    ————————>Victory

2. 配置MultiDex

Android5.0及以上版本默认支持MultiDex

2.1 修改build.gradle

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
android {
compileSdkVersion 21
buildToolsVersion "21.1.0"

defaultConfig {
...
minSdkVersion 14
targetSdkVersion 21
...

// Enabling MultiDex support.
multiDexEnabled true
}
...
}
dependencies { compile 'com.android.support:multidex:1.0.1'
}

2.2 修改application

三种方法

2.2.1 在AndroidManifest.xml的application中声明android.support.MultiDex.MultiDexApplication

2.2.2 让自己的application类继承MultiDexApplication

2.2.3 重写attachBaseContext()方法

1
2
3
4
5
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}

3. 推荐文章

更多关于MultiDex可以查阅
美团技术沙龙关于分包的博客
或者直接查看MultiDex源码

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×